package co.yixiang.modules.activity.service.mapper;

import co.yixiang.common.mapper.CoreMapper;
import co.yixiang.modules.activity.domain.YxStoreCouponUser;
import co.yixiang.modules.activity.vo.StoreCouponUserVo;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.Date;
import java.util.List;

/**
 * YxStoreCouponUserMapper接口用于处理用户优惠券相关的数据库操作。
 * 它继承了CoreMapper，用于处理YxStoreCouponUser领域对象的基本数据库操作。
 * 此接口主要定义了一个用于查询用户可用优惠券列表的方法。
 */
@Repository
public interface YxStoreCouponUserMapper extends CoreMapper<YxStoreCouponUser> {

    /**
     * 查询用户可用的优惠券列表。
     * 此方法通过用户的ID、当前时间和商品价格来筛选出用户可以使用的优惠券。
     *
     * @param now 当前时间，用于筛选未过期的优惠券。
     * @param price 商品价格，用于筛选满足使用条件的优惠券。
     * @param uid 用户ID，用于筛选属于特定用户的优惠券。
     * @return 返回一个StoreCouponUserVo对象列表，包含用户可用的优惠券信息。
     */
    @Select("select A.id,A.coupon_title as couponTitle,A.coupon_price as couponPrice," +
            "A.end_time as endTime,B.use_min_price as useMinPrice,B.type," +
            "B.product_id as productId" +
            " from yx_store_coupon_user A left join yx_store_coupon B " +
            "on A.cid = B.id " +
            "where A.status = 0" +
            " AND A.end_time > #{now}  " +
            " AND A.uid = #{uid}  AND A.use_min_price <= #{price} " +
            " ORDER BY B.id DESC")
    List<StoreCouponUserVo> selectCouponList(@Param("now") Date now, @Param("price") double price,
                                             @Param("uid") Long uid);
}

